package com.example.administrator.baikangxing.ronglian;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.util.Log;

import com.example.administrator.baikangxing.Dao.OperateData;
import com.example.administrator.baikangxing.MyApplication;
import com.example.administrator.baikangxing.R;
import com.example.administrator.baikangxing.activity.VideoActivity;
import com.example.administrator.baikangxing.config.Constants;
import com.example.administrator.baikangxing.utils.LogUtil;
import com.yuntongxun.ecsdk.ECDevice;
import com.yuntongxun.ecsdk.ECError;
import com.yuntongxun.ecsdk.ECInitParams;
import com.yuntongxun.ecsdk.ECNotifyOptions;
import com.yuntongxun.ecsdk.ECVoIPCallManager;
import com.yuntongxun.ecsdk.ECVoIPSetupManager;
import com.yuntongxun.ecsdk.SdkErrorCode;

/**
 * Created by manbuAndroid5 on 2016/9/30.
 */

public class SDKCoreHelper implements ECDevice.InitListener {
    private ECNotifyOptions mOptions;
    private Context context;
    private ECDevice.ECConnectState mConnect = ECDevice.ECConnectState.CONNECT_FAILED;
    public static final String ACTION_LOGOUT = Constants.APP_PACKAGE_NAME + ".Smartrobot_logout";
    private ECInitParams params;
    private Context c;
    private String user_name;

    public SDKCoreHelper(Context context) {
        this.context = context;
        initSDK();
        initNotifyOptions();
    }

    @Override
    public void onInitialized() {
        // SDK已经初始化成功
        Log.e("lym", "初始化SDK成功");
        Intent intent = new Intent(context, VideoActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        ECDevice.setPendingIntent(pendingIntent);
        ECDevice.setReceiveAllOfflineMsgEnabled(true);
//        ECInitParams.createParams().setPendingIntent(pendingIntent);
        //设置登录参数，可分为自定义方式和VoIP验密方式，详情点此查看>>
        //设置通知回调监听包含登录状态监听，接收消息监听，VoIP呼叫事件回调监听和
        //设置接收VoIP来电事件通知Intent等，详情点此查看>>
        //验证参数是否正确，登陆SDK，详情点此查看>>
        loginSDK();
    }

    private void initNotifyOptions() {
        if(mOptions == null) {
            mOptions = new ECNotifyOptions();
        }
        // 设置新消息是否提醒
        mOptions.setNewMsgNotify(true);
        // 设置状态栏通知图标
        mOptions.setIcon(R.drawable.ic_launcher);
        // 设置是否启用勿扰模式（不会声音/震动提醒）
        mOptions.setSilenceEnable(false);
        // 设置勿扰模式时间段（开始小时/开始分钟-结束小时/结束分钟）
        // 小时采用24小时制
        // 如果设置勿扰模式不启用，则设置勿扰时间段无效
        // 当前设置晚上11点到第二天早上8点之间不提醒
        mOptions.setSilenceTime(23, 0, 8, 0);
        // 设置是否震动提醒(如果处于免打扰模式则设置无效，没有震动)
        mOptions.enableShake(true);
        // 设置是否声音提醒(如果处于免打扰模式则设置无效，没有声音)
        mOptions.enableSound(true);
    }

    @Override
    public void onError(Exception e) {
        //在初始化错误的方法中打印错误原因
        Log.i("lym", "初始化SDK失败" + e.getMessage());
//        Intent intent = new Intent(ACTION_SDK_CONNECT);
//        intent.putExtra("error", ERROR_CODE_INIT);
//        context.sendBroadcast(intent);
        ECDevice.unInitial();
    }

    /**
     * VoIP呼叫接口
     *
     * @return
     */
    public static ECVoIPCallManager getVoIPCallManager() {
        return ECDevice.getECVoIPCallManager();
    }

    public static ECVoIPSetupManager getVoIPSetManager() {
        return ECDevice.getECVoIPSetupManager();
    }

    private void initSDK() {
        //判断SDK是否已经初始化
        if (!ECDevice.isInitialized()) {
        /*  initial: ECSDK 初始化接口
            * 参数：
            *     inContext - Android应用上下文对象
            *     inListener - SDK初始化结果回调接口，ECDevice.InitListener
            *
            * 说明：示例在应用程序创建时初始化 SDK引用的是Application的上下文，
            *       开发者可根据开发需要调整。
            */
            mConnect = ECDevice.ECConnectState.CONNECTING;
            ECDevice.initial(context.getApplicationContext(),this);
        }
        // 已经初始化成功，后续开发业务代码。
        Log.e("lym", "初始化SDK及登陆代码完成");
        loginSDK();
    }
    public  void logout(){
        ECDevice.logout(new ECDevice.OnLogoutListener() {
            @Override
            public void onLogout() {
                LogUtil.e("容联云退出登录");
                mConnect = ECDevice.ECConnectState.CONNECT_FAILED;
                if (params != null && params.getInitParams() != null) {
                    params.getInitParams().clear();
                }
                params = null;
                context.sendBroadcast(new Intent(ACTION_LOGOUT));
            }
        });
    }

    public void loginSDK() {
        //login sdk
        if (params == null)
            params = ECInitParams.createParams();
        try {
            c = MyApplication.context.createPackageContext("com.example.administrator.baikangxing", Context.CONTEXT_IGNORE_SECURITY);
            user_name = OperateData.getStringData(c, Constants.USER_NAME);
            LogUtil.e("容联云登录帐号为："+ user_name);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        params.setUserid(user_name);//推荐使用客户项目APP的登录帐号，测试阶段Userid可以填写手机号
        params.setAppKey("8aaf07085af9176d015b141dd39007f6");//应用ID；登陆官网查看控制台→应用列表→应用管理→APP ID=8aaf070857514dd701577913832a177f
        params.setToken("c4af36d1ac231d15d17a75971e420868");//应用Token；登陆官网查看控制台→应用列表→应用管理→APP TOKEN=8c6f8b9e4e55f810df5853e3a5b60789
        //设置登陆验证模式：自定义登录方式
        params.setAuthType(ECInitParams.LoginAuthType.NORMAL_AUTH);
        //LoginMode（强制上线：FORCE_LOGIN  默认登录：AUTO。使用方式详见注意事项）
        params.setMode(ECInitParams.LoginMode.FORCE_LOGIN);
        ECDevice.setOnDeviceConnectListener(new ECDevice.OnECDeviceConnectListener() {
            @Override
            public void onConnect() {
                LogUtil.e("兼容旧版本的方法，不必处理");
            }

            @Override
            public void onDisconnect(ECError ecError) {
                LogUtil.e("兼容旧版本的方法，不必处理");
            }

            @Override
            public void onConnectState(ECDevice.ECConnectState ecConnectState, ECError ecError) {
                if (ecConnectState == ECDevice.ECConnectState.CONNECT_FAILED) {
                    if (ecError.errorCode == SdkErrorCode.SDK_KICKED_OFF) {
                        Log.i("", "==帐号异地登陆");
                    } else {
                        Log.i("", "==其他登录失败,错误码：" + ecError.errorCode);
                    }
                    return;
                } else if (ecConnectState == ECDevice.ECConnectState.CONNECT_SUCCESS) {
                    Log.i("", "==登陆成功");
                }
            }
        });
        //验证参数是否正确
        if (params.validate()) {
            // 登录函数
            ECDevice.login(params);
        } else {
            Log.e("lym", "登录参数有误！");
        }
    }

}
